البرمجة

نشر تطبيق Node.js مع MongoDB على Kubernetes باستخدام Helm

جدولة تطبيق Node.js مع MongoDB على Kubernetes باستخدام Helm

في العصر الحالي، أصبحت تقنيات الحاويات (containers) وأدوات إدارة الحاويات مثل Kubernetes ضرورية في عملية نشر وإدارة التطبيقات بطريقة مرنة وفعالة. واحدة من أكثر الاستخدامات شيوعًا لهذه التقنيات هي جدولة وتشغيل التطبيقات الموزعة، مثل تطبيقات Node.js التي تحتاج إلى قاعدة بيانات مثل MongoDB. يعتبر Kubernetes أداة قوية لإدارة هذه التطبيقات على نطاق واسع، ويوفر طريقة مرنة لإدارة التوزيع، والترقية، والتحجيم (scaling) التلقائي، ومراقبة حالة التطبيق.

Helm، من جهة أخرى، هو أداة لإدارة الحزم (package manager) على Kubernetes، ويجعل عملية نشر التطبيقات المعقدة أسهل وأسرع عبر استخدام القوالب المخصصة (templates) التي يمكنها إنشاء موارد Kubernetes اللازمة بسهولة. في هذا المقال، سنتعرف على كيفية جدولة تطبيق Node.js مع MongoDB على Kubernetes باستخدام Helm، بحيث يمكن إدارة وتوزيع هذه التطبيقات بسلاسة.

مقدمة عن Kubernetes و Helm

Kubernetes:

Kubernetes هو نظام مفتوح المصدر يُستخدم لإدارة الحاويات على نطاق واسع. يعمل Kubernetes على توزيع الحاويات عبر مجموعة من الخوادم (nodes) ويقدم العديد من الميزات مثل:

  • التوزيع الآلي (Automated Deployment): إمكانية نشر التطبيقات بسهولة.

  • التحجيم التلقائي (Auto-scaling): تعديل حجم التطبيق بشكل تلقائي بناءً على احتياجات الموارد.

  • الاسترداد التلقائي (Self-healing): إعادة تشغيل الحاويات المعطلة تلقائيًا.

  • التحكم في الشبكة (Network Control): إدارة التواصل بين الحاويات.

Helm:

Helm هو أداة إدارة حزم (Package Manager) لـ Kubernetes، وتسمح للمطورين بإنشاء وتوزيع تطبيقاتهم بشكل أكثر تنظيماً. من خلال Helm، يمكن للمستخدمين استخدام “Charts” وهي حزم مكونة من قوالب Kubernetes. هذه القوالب تسمح بتحديد كيف ينبغي نشر التطبيقات على Kubernetes بشكل موحد وقابل للتكرار. باستخدام Helm، يمكن إدارة التطبيق بشكل أسرع وأبسط، من خلال تقليل الحاجة لكتابة ملفات YAML طويلة ومعقدة.

متطلبات نشر تطبيق Node.js مع MongoDB على Kubernetes باستخدام Helm

قبل البدء في إعداد التطبيق، يجب التأكد من أن البيئة جاهزة للعمل. تشمل هذه المتطلبات:

  1. Kubernetes Cluster: تحتاج إلى بيئة Kubernetes جاهزة للعمل. يمكنك إعدادها محليًا باستخدام Minikube أو استخدام خدمة سحابية مثل Google Kubernetes Engine (GKE) أو Amazon Elastic Kubernetes Service (EKS).

  2. Helm: يجب تثبيت Helm على جهازك لتتمكن من إدارة الحزم على Kubernetes.

  3. Node.js Application: يتطلب الأمر تطبيق Node.js يعمل بشكل محلي مع MongoDB كقاعدة بيانات.

  4. MongoDB: سيكون عليك إعداد MongoDB باستخدام Helm Chart الخاص بها.

خطوات نشر تطبيق Node.js مع MongoDB على Kubernetes باستخدام Helm

1. إعداد Kubernetes و Helm

إعداد Kubernetes

أولاً، يجب إعداد Kubernetes على جهازك أو استخدام مزود خدمة سحابية مثل Google Cloud أو Amazon AWS. سنشرح باختصار كيفية إعداد Minikube لإعداد Kubernetes محليًا.

bash
# تثبيت Minikube brew install minikube # بدء تشغيل Minikube minikube start # تحقق من حالة Minikube kubectl get nodes

إعداد Helm

لتثبيت Helm، يجب أن تكون لديك بيئة Kubernetes قيد التشغيل. ثم يمكنك تنزيل وتثبيت Helm كالتالي:

bash
# تنزيل وتثبيت Helm brew install helm # التحقق من تثبيت Helm helm version

2. إنشاء تطبيق Node.js

قبل أن نبدأ في العمل على Kubernetes، يجب أن يكون لدينا تطبيق Node.js يعمل على قاعدة بيانات MongoDB.

إعداد تطبيق Node.js

في مجلد جديد، قم بإنشاء ملف server.js الذي سيعمل كمخدم ويب باستخدام Express.js.

bash
mkdir my-node-app cd my-node-app npm init -y npm install express mongoose

ثم قم بإنشاء server.js بالرمز التالي:

javascript
const express = require('express'); const mongoose = require('mongoose'); const app = express(); // الاتصال بقاعدة بيانات MongoDB mongoose.connect('mongodb://mongo:27017/myapp', { useNewUrlParser: true, useUnifiedTopology: true }); // إعدادات التطبيق app.get('/', (req, res) => { res.send('Hello World from Node.js and MongoDB on Kubernetes!'); }); // بدء الخادم app.listen(3000, () => { console.log('Server is running on port 3000'); });

3. إنشاء Dockerfile لتطبيق Node.js

سنحتاج إلى إنشاء Dockerfile لتطبيق Node.js بحيث يمكننا نشره على Kubernetes باستخدام صورة Docker.

dockerfile
# استخدم صورة Node.js الرسمية FROM node:14 # إعداد الدليل في الحاوية WORKDIR /usr/src/app # نسخ الملفات المطلوبة COPY package*.json ./ # تثبيت الحزم المطلوبة RUN npm install # نسخ جميع الملفات COPY . . # تحديد المنفذ الذي سيعمل عليه التطبيق EXPOSE 3000 # تشغيل التطبيق CMD ["node", "server.js"]

ثم قم ببناء الصورة باستخدام الأمر التالي:

bash
docker build -t my-node-app .

4. نشر MongoDB باستخدام Helm

أحد أهم مزايا Helm هو أنها توفر Charts جاهزة للتنفيذ. للبدء، سنستخدم Helm Chart الرسمي لنشر MongoDB على Kubernetes.

bash
# إضافة مستودع Charts الرسمي helm repo add bitnami https://charts.bitnami.com/bitnami helm repo update # نشر MongoDB باستخدام Helm helm install mongo bitnami/mongodb

يمكنك التحقق من نشر MongoDB:

bash
kubectl get pods

5. نشر تطبيق Node.js على Kubernetes

الآن بعد أن أصبح لدينا MongoDB يعمل على Kubernetes، يمكننا نشر تطبيق Node.js باستخدام Helm.

إنشاء ملف Helm Chart لتطبيق Node.js

داخل مجلد تطبيقك، أنشئ مجلدًا جديدًا باسم charts ومن ثم أنشئ ملف Chart.yaml وملف values.yaml لتكوين نشر التطبيق.

yaml
# charts/my-node-app/Chart.yaml apiVersion: v2 name: my-node-app description: A simple Node.js application version: 1.0.0
yaml
# charts/my-node-app/values.yaml replicaCount: 1 image: repository: my-node-app tag: latest pullPolicy: Always service: type: ClusterIP port: 3000

ثم قم بإنشاء ملف deployment.yaml داخل مجلد templates داخل Chart.

yaml
# charts/my-node-app/templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-node-app spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: app: my-node-app template: metadata: labels: app: my-node-app spec: containers: - name: my-node-app image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" ports: - containerPort: 3000 env: - name: MONGO_URI value: "mongodb://mongo:27017/myapp"

تثبيت تطبيق Node.js باستخدام Helm

بمجرد أن يكون لديك Helm Chart، يمكنك تثبيت التطبيق باستخدام Helm:

bash
helm install my-node-app ./charts/my-node-app

6. التحقق من التطبيق على Kubernetes

يمكنك الآن التحقق من تطبيقك على Kubernetes من خلال الوصول إلى خدمة التطبيق عبر Kubernetes:

bash
kubectl get svc

ثم اعثر على عنوان IP الخاص بالخدمة واختبره في متصفحك للوصول إلى تطبيق Node.js.

الختام

من خلال استخدام Kubernetes و Helm، يمكن جدولة وتوزيع تطبيق Node.js مع MongoDB بسهولة ومرونة. من خلال استخدام Helm Charts، يتم تبسيط عملية النشر والتحديث والصيانة. هذه الطريقة تتيح للمطورين إمكانية إدارة تطبيقاتهم بشكل أكثر فعالية، مما يسهم في تحسين الأداء والكفاءة في بيئات الإنتاج.